perm filename SAMPLE[P,JRA]1 blob sn#054878 filedate 1973-07-25 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00003 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	HERE IS A SAMPLE DIALOGUE WITH A PROGRAM GENERATOR-VERIFIER
C00005 00003	EXAMPLE 2.  Here is the generation-verification of the iterative
C00006 ENDMK
C⊗;
HERE IS A SAMPLE DIALOGUE WITH A PROGRAM GENERATOR-VERIFIER
WHICH USES HOARE'S RULES EXPRESSED IN VCGEN.

We wish to write a procedure named FACT of two arguments,one of
which is a parameter named a, and the other is to take be assigned
r value. Name this second argument,r. The parameter,a, can take on
values ≥0; the output  is to be such that r=a!.

→   USE V8

P(proc q(x,v);A}R   1

→   LET P,R,q,x,v BE a≥0,r=a!,FACT,r,a

a≥0{proc FACT(r,a);A} r=a!     2

→   TRY

a≥0{FACT(r,a)}r=a! ||- a≥0{A} r=a!   3 (1,2)

→   USE V5 3(2)

a≥0{A; IF Q THEN B ELSE C}r=a!   4

→   TRY

a≥0∧Q{A;B}r=a!   a≥0∧¬Q{A;C}r=a!  5 (1 ,2)

→   LET Q,A BE a=0,null

a≥0∧a=0{B}r=a!   a≥0∧a≠0{C}r=a!   6(1,2)

→   TRIVIAL a≥0∧a=0⊃a=0,a≥0∧a≠0⊃a>0

→   SIMP 6

a=0{B}r=a!    a>0{C}r=a!  7(1,2)

→   SHOW 1

a≥0{proc FACT(r,a);IF a=0 THEN B ELSE C}r=a!

→   GO 7(1)

→   LET B BE r←1

a=0{r←1}r=a! 8

→TRY V1,V3

a=0{null}1=a! 9
a=0⊃1=a! 10

→   TRIVIAL a=0⊃1=a!

7(1) ESTABLISHED,
a=0{r←1}r=a!  a>0{C}r=a! 11(1,2)
a>0{C}r=a!

→   LET C BE FACT(r,a-1);r←r*a

a>0{FACT(r,a-1);r←r*a}r=a!  12

→   USE V1

a>0{FACT(r,a-1)}r*a=a!  13

→   TRY V7

U(x;v){FACT(x;v)}W(x;v)  a>0{null}U(r,a-1)∧∀r(W(r,a-1)⊃r*a=a!)  14

→   LET U(x,v), W(x,v) BE x≥0,x=v!

x≥0{FACT(x,v)}x=v! a>0{null}r≥0∧∀r(r=a-1!)⊃r*a=a!) 15

→   BACK 14

→   LET U(x,v), W(x,v) BE v≥0,x=v!

v≥0{FACT(x,v)}x=v! a>0{null}a-1≥0∧∀r(r=a-1!⊃r*a=a!) 16

→   USE V3,3(1)

a>0⊃a-1≥0∧∀r(r=a-1!⊃r*a=a!) 17

→   TRIVIAL 17[1]

→   PROVABLE 17[2]

7(2) ESTABLISHED,
7 ESTABLISHED,
1 ESTABLISHED,
 
PROGRAM IS:

{proc FACT(r,a);IF a=0 THEN r←1 ELSE FACT(r,a-1);r←r*a}

ASSUMPTIONS ARE:
   TRIVIAL
a≥0∧a=0 ⊃ a=0
a≥0∧a=0 ⊃ a>0

   PROVABLE
r=a-1! ⊃ r*a=a!

EXAMPLE 2.  Here is the generation-verification of the iterative
form of the factorial function.

→   USE V8

P{proc q(x,v);A}R 1

→   LET P,R,q,x,v BE a≥0,r=a!,FACT,r,a

a≥0{proc FACT(r,a)A} r=a!   2

→   TRY

a≥0{FACT(r,a)}r=a! ||- a≥0{A} r=a!  3(1,2)

→   USE V4 3(2)

a≥0{A;R WHILE S DO B}r=a!  4

→   TRY

a≥0{A}R R∧S{B}R R∧¬S⊃r=a!  5(1,2,3)

→   LET S BE a≠0

a≥0{A}R  R∧a≠0{B}R  R∧¬a≠0⊃r=a! 6(1,2,3)

→   TRIVIAL a≡¬a≠0

→   SIMP 6

a≥0{A}R R∧a≠0{B}R  R∧a=0⊃r=a!  7(1,2,3)

→   LET A BE x←a;r←1;